package com.ysx.TrainSchedulesAndTicketSales.enums;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.List;

/**
 * 座位类型枚举类
 * 定义了列车座位类型的枚举值，包括一等座、二等座、软卧和硬卧
 * 每种座位类型包含代码、描述和价格系数
 */
public enum SeatTypeEnum {

    /**
     * 一等座，代码为"1"，价格系数为0.4
     */
    YDZ("1", "一等座", new BigDecimal("0.4")),
    
    /**
     * 二等座，代码为"2"，价格系数为0.3
     */
    EDZ("2", "二等座", new BigDecimal("0.3")),
    
    /**
     * 软卧，代码为"3"，价格系数为0.6
     */
    RW("3", "软卧", new BigDecimal("0.6")),
    
    /**
     * 硬卧，代码为"4"，价格系数为0.5
     */
    YW("4", "硬卧", new BigDecimal("0.5"));

    private String code;

    private String desc;


    private BigDecimal price;

    /**
     * 座位类型枚举构造函数
     * 
     * @param code 座位类型代码
     * @param desc 座位类型描述
     * @param price 座位类型价格系数
     */
    SeatTypeEnum(String code, String desc, BigDecimal price) {
        this.code = code;
        this.desc = desc;
        this.price = price;
    }

    /**
     * 获取座位类型代码
     * 
     * @return 座位类型代码
     */
    public String getCode() {
        return code;
    }

    /**
     * 获取座位类型描述
     * 
     * @return 座位类型描述
     */
    public String getDesc() {
        return desc;
    }

    /**
     * 获取座位类型价格系数
     * 
     * @return 座位类型价格系数
     */
    public BigDecimal getPrice() {
        return price;
    }

    /**
     * 设置座位类型价格系数
     * 
     * @param price 座位类型价格系数
     */
    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    /**
     * 获取座位类型枚举列表
     * 将所有座位类型枚举转换为包含代码和描述的HashMap列表
     * 
     * @return 包含所有座位类型代码和描述的列表
     */
    public static List<HashMap<String,String>> getEnumList() {
        List<HashMap<String, String>> list = new ArrayList<>();
        for (SeatTypeEnum anEnum : EnumSet.allOf(SeatTypeEnum.class)) {
            HashMap<String, String> map = new HashMap<>();
            map.put("code",anEnum.code);
            map.put("desc",anEnum.desc);
            list.add(map);
        }
        return list;
    }

    /**
     * 根据代码获取座位类型枚举
     * 
     * @param code 座位类型代码
     * @return 对应的座位类型枚举，如果未找到则返回null
     */
    public static SeatTypeEnum getEnumByCode(String code) {
        for (SeatTypeEnum enums : SeatTypeEnum.values()) {
            if (enums.getCode().equalsIgnoreCase(code)) {
                return enums;
            }
        }
        return null;
    }
}